﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.SqlClient;
using System.Data;
using Joel.Vishnu.AccesoDatos.Interfaces;

namespace Joel.Vishnu.AccesoDatos.SQL_Server
{
    public class ServicioDatosCliente : ServicioDatosBase, IServicioDatosCliente
    {
        #region Constructores

        public ServicioDatosCliente()
            : base()
        {
        }

        #endregion

        #region Metodos

        public DataSet Clientes_DevolverTodos()
        {
            try
            {
                SqlCommand cm = new SqlCommand("Clientes_DevolverTodos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter da = new SqlDataAdapter(cm);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Clientes_DevolverPorId(Int32 clienteId)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Clientes_DevolverPorId", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@clienteId", clienteId));
                SqlDataAdapter da = new SqlDataAdapter(cm);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 Clientes_Insertar(String nombre, String apellido, Int32 dni, DateTime fechaCumpleanos, Int32 generoId,
            String email, String telefono, String direccion, Int32 barrioId, DateTime fechaPrimeraCompra)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Clientes_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@nombre", nombre));
                cm.Parameters.Add(new SqlParameter("@apellido", apellido));
                cm.Parameters.Add(new SqlParameter("@dni", dni));
                cm.Parameters.Add(new SqlParameter("@fechaCumpleanos", fechaCumpleanos));
                cm.Parameters.Add(new SqlParameter("@generoId", generoId));
                cm.Parameters.Add(new SqlParameter("@email", email));
                cm.Parameters.Add(new SqlParameter("@telefono", telefono));
                cm.Parameters.Add(new SqlParameter("@direccion", direccion));
                cm.Parameters.Add(new SqlParameter("@barrioID", barrioId));
                cm.Parameters.Add(new SqlParameter("@fechaPrimeraCompra", fechaPrimeraCompra));
                Conexion.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Clientes_Modificar(Int32 clienteId, String nombre, String apellido, Int32 dni, DateTime fechaCumpleanos,
            Int32 generoId, String email, String telefono, String direccion, Int32 barrioId, DateTime fechaPrimeraCompra)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Clientes_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@clienteId", clienteId));
                cm.Parameters.Add(new SqlParameter("@nombre", nombre));
                cm.Parameters.Add(new SqlParameter("@apellido", apellido));
                cm.Parameters.Add(new SqlParameter("@dni", dni));
                cm.Parameters.Add(new SqlParameter("@fechaCumpleanos", fechaCumpleanos));
                cm.Parameters.Add(new SqlParameter("@generoId", generoId));
                cm.Parameters.Add(new SqlParameter("@email", email));
                cm.Parameters.Add(new SqlParameter("@telefono", telefono));
                cm.Parameters.Add(new SqlParameter("@direccion", direccion));
                cm.Parameters.Add(new SqlParameter("@barrioID", barrioId));
                cm.Parameters.Add(new SqlParameter("@fechaPrimeraCompra", fechaPrimeraCompra));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Clientes_Eliminar(Int32 clienteId)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Clientes_Eliminar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@clienteId", clienteId));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        #endregion
    }
}
